Nginx com PHP 5 ou 7 em qualquer servidor Ubuntu ou Debian ########################## 1 – Atualizando o sistema ########################## A primeira coisa é atualizar o servidor, não comece com o pé esquerdo utilizando software defasado com possíveis falhas de segurança. Logue como root na máquina e então: # atualiza a lista de pacotes apt-get update # instala as atualizações diponíveis apt-get upgrade -y –force-yes ############################################ 2 – Criando um usuário para a sua aplicação ############################################ Nada de sair fazendo tudo como root deixando processos com permissão para tudo, vamos seguir princípios básicos de segurança. Logado como root execute: # garante que o sudo e o adduser estão instalados apt-get install sudo adduser -y –force-yes # cria um usuário para a sua app adduser user-da-sua-app # permite ao usuário rodar comandos com o sudo usermod -a -G sudo user-da-sua-app Pronto, a partir de agora você deverá deslogar e logar na máquina com o usuário criado (user-da-sua-app) e fazer tudo a partir dele. ######################## 3 – Instalando o Nginx ######################## A partir do usuário criado para a sua aplicação, vamos instalar o Nginx: sudo apt-get install nginx -y –force-yes Sim, o Nginx é simples assim. =) ############################################ 4 – Adicionando os Repositórios do PHP-FPM ############################################ Para instalar o PHP-FPM, é preciso adicionar o repositório de origem do mesmo. Ao adicionar um repositório é preciso informar o codename da sua distribuição Linux e para fazer isso utilizaremos o lsb_release. Vamos instalá-lo então: sudo apt-get install lsb-release -y –force-yes A partir de agora, podemos rodar o seguinte comando para descobrir o codename da sua distribuição: lsb_release -a | grep Codename | sed -s ‘s/Codename:\s*//’ No Debian 8 por exemplo, tal comando retornará jessie, no Ubuntu 16 retornará xenial e assim por diante. Agora que já sabemos o codename, precisamos adicionar uma linha indicando o repositório no arquivo /etc/apt/sources.list. A linha a ser adicionada pode ser vista rodando o seguinte comando: ubuntu echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu $(lsb_release -a | grep Codename | sed -s ‘s/Codename:\s*//’) main" debian echo "deb http://packages.dotdeb.org $(lsb_release -a | grep Codename | sed -s ‘s/Codename:\s*//’) all" Tal comando retornará por exemplo: >> No Ubuntu 16: deb http://ppa.launchpad.net/ondrej/php/ubuntu xenial main >> No Debian 8: deb http://packages.dotdeb.org jessie all Edite então o /etc/apt/sources.list e adicione a linha apropriada: sudo vi /etc/apt/sources.list Se prefrir, os seguintes comandos podem fazer isso automaticamente por você: ubuntu echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu $(lsb_release -a | grep Codename | sed -s ‘s/Codename:\s*//’) main" | sudo tee -a /etc/apt/sources.list debian echo "deb http://packages.dotdeb.org $(lsb_release -a | grep Codename | sed -s ‘s/Codename:\s*//’) all" | sudo tee -a /etc/apt/sources.list Após adicionar o repositório, vamos atualizar a lista de pacotes disponíveis: sudo apt-get update Pronto, o PHP-FPM está pronto para ser instalado. ######################### 5 – Instalando o PHP-FPM ######################### Para verificar quais versões do PHP estão disponíveis, você pode rodar o seguinte comando: sudo apt-cache search php | grep fpm –color Ele retornará por exemplo: php5-fpm – server-side, HTML-embedded scripting language (FPM-CGI binary) php-fpm – server-side, HTML-embedded scripting language (FPM-CGI binary) (default) php7.0-fpm – server-side, HTML-embedded scripting language (FPM-CGI binary) php-fpm – server-side, HTML-embedded scripting language (FPM-CGI binary) (default) php7.0-fpm – server-side, HTML-embedded scripting language (FPM-CGI binary) php5.5-fpm – server-side, HTML-embedded scripting language (FPM-CGI binary) php5.6-fpm – server-side, HTML-embedded scripting language (FPM-CGI binary) php7.1-fpm – server-side, HTML-embedded scripting language (FPM-CGI binary) Um aviso: O PHP 7.1 neste momento está como alpha (extremamente experimental), se quiser instalá-lo, use-o por sua conta e risco. ;) Escolhida a versão do PHP, vamos realizar a instalação. Se você escolheu por exemplo o php7.0-fpm, o comando será: sudo apt-get install libpcre3 php7.0-fpm -y –force-yes Note que adicionei a instalação da libpcre3, ela é um pré-requisito para que tudo funcione bem e nem sempre está instalada, então é melhor garantir para não termos problemas. ########################### 6 – Configurando o PHP-FPM ########################### Com o PHP-FPM instalado, precisamos alterar algumas configurações. Primeiro localize onde está o arquivo de configurações no seu servidor com o comando: sudo find /etc/* -name ‘*www.conf*’ | grep php Tal comando retornará por exemplo: /etc/php/7.0/fpm/pool.d/www.conf Agora, edite o arquivo www.conf encontrado: sudo vi /etc/php/7.0/fpm/pool.d/www.conf # ou para editar buscando automaticamente o arquivo: sudo vi $(sudo find /etc/* -name ‘*www.conf*’ | grep php) Garanta que as seguintes configurações existam nele e que estejam descomentadas com as seguintes propriedades: ; Socket que será aberto pelo PHP-FPM listen = /var/run/php-fpm.sock ; Indica que o PHP-FPM se comunicará via Socket. listen.mode = 0660 ; Permite a comunicação com o processo do ; Nginx que utiliza o usuário www-data listen.owner = www-data listen.group = www-data ######################### 7 – Configurando o Nginx ######################### Primeiro crie uma pasta para a sua aplicação e permita que o usuário criado (user-da-sua-app) acesse ela: sudo mkdir -p /var/www/sua-app sudo chown user-da-sua-app:user-da-sua-app /var/www/sua-app Agora edite o arquivo /etc/nginx/sites-available/default: sudo vi /etc/nginx/sites-available/default E coloque o seguinte conteúdo nele: server { listen 80; root /var/www/sua-app; location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } E pronto, isto será o suficiente para o Nginx conseguir executar arquivos PHP na pasta criada. Vamos criar um arquivo .php na pasta da sua aplicação para testes: vi /var/www/sua-app/test.php Coloque nele o seguinte conteúdo: [sourcecode language=”php”] Feito isso, vamos agora testar se tudo deu certo! 8 – Iniciando o Nginx e o PHP-FPM Existem 3 formas de subir os serviços do Nginx e do PHP-FPM e elas podem ser vistas com o seguinte comando que mostrará exatamente o que deve ser feito de acordo com o seu servidor: printf "\n\n——————-\n\n sudo service $(find /etc/init.d -name ‘*nginx*’ | awk ‘{ gsub(/.*\//, "", $0); print $0 }’) restart\n sudo service $(find /etc/init.d -name ‘*php*fpm*’ | awk ‘{ gsub(/.*\//, "", $0); print $0 }’) restart\n\n sudo $(find /etc/init.d -name ‘*nginx*’) restart\n sudo $(find /etc/init.d -name ‘*php*fpm*’) restart\n\n sudo $(find /usr/sbin -name ‘*nginx*’)\n sudo $(find /usr/sbin -name ‘*php*fpm*’)\n\n——————-\n\n" Tal comando retornará por exemplo: ——————- sudo service nginx restart sudo service php7.0-fpm restart sudo /etc/init.d/nginx restart sudo /etc/init.d/php7.0-fpm restart sudo /usr/sbin/nginx sudo /usr/sbin/php-fpm7.0 ——————- O método com service é o mais recomendado. Se não funcionar e o processo não subir, tente com o init.d. Em último caso, se nada der certo, passe para o sbin, que subirá o serviço ou pelo menos retornará maiores informações sobre algum possível problema. E como você faz para saber se deu certo subir os processos com algum desses comandos? Você pode utilizar o ps aux para conferir. Garanta que ele está instalado: sudo apt-get install procps -y –force-yes E então rode: # verifica o processo do nginx ps aux | grep nginx # verifica o processo do php ps aux | grep php Tais comandos devem retornar algo como: Nginx: root 60 0.0 0.0 125188 1456 ? Ss 03:31 0:00 nginx: master process /usr/sbin/nginx www-data 61 0.0 0.0 125508 3228 ? S 03:31 0:00 nginx: worker process www-data 62 0.0 0.0 125508 3228 ? S 03:31 0:00 nginx: worker process www-data 64 0.0 0.0 125508 3228 ? S 03:31 0:00 nginx: worker process www-data 65 0.0 0.0 125508 3228 ? S 03:31 0:00 nginx: worker process user-da+ 99 0.0 0.0 11284 928 ? PHP: root 93 0.0 0.1 211796 9404 ? Ss 03:31 0:00 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf) www-data 94 0.0 0.0 211796 6260 ? S 03:31 0:00 php-fpm: pool www www-data 95 0.0 0.0 211796 6260 ? S 03:31 0:00 php-fpm: pool www user-da+ 101 0.0 0.0 11284 1012 ? S+ 03:32 0:00 grep –color=auto php Com os serviços rodando, você pode testar tudo acessando no navegador o arquivo test.php criado através do IP do seu servidor: http://ip-do-seu-servidor/test.php Se tudo deu certo, você deverá ver algo parecido com a seguinte tela: phpinfo() - PHP 7 É só isso? #################################################################################### Sim, o seu servidor com Nginx utilizando PHP-FPM já está configurado e rodando! Antes de ficar decepcionado por causa da configuração do Nginx, explico: Criei propositalmente a menor configuração possível para apenas executar arquivos PHP. Para configurar um domínio, abrir automaticamente o index.php, servir arquivos CSS, JavaScript, imagens, utilizar url rewrite para projetos como WordPress, CodeIgniter, Magento, Laravel, etc. ou definir onde os logs serão salvos e demais opções, é só alterar o arquivo de configurações do Nginx e reiniciá-lo. E essa parte é simples, basta pesquisar na internet que existirão infinitas referências. Para uma configuração com foco no WordPress por exemplo, existem exemplos oficias do próprio time do WordPress: https://codex.wordpress.org/Nginx Para CodeIgniter, existem exemplos no site oficial no Nginx: https://www.nginx.com/resources/wiki/start/topics/recipes/codeigniter/ Laravel? http://laravel-recipes.com/recipes/26/creating-a-nginx-virtualhost E por aí vai. Boa sorte com o seu novo servidor e até a próxima! =) ####################################################################################